package asteroids.engine;

import java.awt.Graphics;

/**
 * Each GameState will hold a GameType, which determines the "scenario" being
 * played. It can monitor the state of the game, record information, and
 * introduce events when needed (new asteroids, ships, teleportations, random
 * deaths) I would expect that for a campaign, it would be necessary to have a
 * separate GameType class for each level...
 * 
 * @author whitecd1
 */
public abstract class Scenario
{
    /**
     * Called at the beginning of a scenario to put the pieces in place and set
     * up tracking variables
     */
    public abstract void initialize(GameState state);

    /**
     * Used to monitor the state of the game and effect changes
     * 
     * @param state
     */
    public abstract void update(GameState state);

    /**
     * Scenarios can be responsible for maintaining/drawing their own HUD
     * information, etc. This could be implemented with a HUD object of some
     * kind, which the scenario can hold
     * 
     * @param g
     */
    public abstract void draw(Graphics g);

    /**
     * 'Cause of course we need this too
     * 
     * @param g
     */
    public abstract void erase(Graphics g);
}
